May 29, 2023

[渗透测试]FRIDA HOOK:脱壳、手机抓包

坑点之Hyper-V不兼容问题:
https://www.bilibili.com/read/cv13748859/
https://nga.178.com/read.php?tid=27069263

一、渗透背景

最近被安排对app进行渗透测试了,但是有一些东西比较让我困扰,就在今天遇到了burp和模拟器不能进行抓包的情景,这是因为什么呢
安卓安全测试中,其中一个维度测试就是服务端业务逻辑安全性测试,主要通过抓包实现。 其实说白了就是中间人攻击,装着要测试APP的安卓手机发包给我们电脑的burpsuite,我们可以使用bp截包改包的内容,再发给服务端,服务端收到请求后响应,把返回包发给电脑的bp,bp最后发给我们手机上的app。 随着移动端安全逐渐加强,现在越来越多的app已经无法抓到包,或者提示网络相关错误。其实根本原因在于客户端发包时对于服务端的ssl证书进行了校验。
用人话来说,这个app进行了保护处理,他在检测到代理模式的情况下不会正常让你运行程序,会提示网络错误或者程序错误等信息。在这种情况下想要抓包该怎么办呢?没错就是再它之上!

我们今天所用的frida可以有效的绕过后三种情景

二、SSL Pinning&&代理检测

这两种都是app的防御机制,什么是SSL pinning呢

证书锁定(SSL/TLS Pinning)即将服务器提供的SSL/TLS证书内置到APP客户端中,当客户端发请求时,通过比对内置的证书和服务器端证书的内容,以确定这个连接的合法性。 所以,ssl pinning需要开发人员将APP代码内置仅接受指定CA或域名的证书,而不接受操作系统或浏览器内置的CA根证书对应的任何证书,通过这种授权方式,保障了APP与服务端通信的唯一性和安全性。但是CA签发证书都存在有效期问题,所以缺点是在证书续期后需要将证书重新内置到APP中。

也就是说他只会接受程序指定的CA证书,因此burp证书或者其他的证书是不被接受的,那么这样真正的安全了吗?假设他有一个检测函数check.js,那么我们只需要使用frida创建一个hook去勾住这个函数即可。对于代理检测也是同一个道理!

三、Frida绕过APP检测

这种方法一般是通用的hook手法。先说明一下使用工具

这三个工具即可完成我们队app的处理。那么开始操作流程

(1)安装Frida

frida是pip下的一个应用,这里推荐使用python3.8或者python3.7,这里我使用的为3.8。让我们进入3.8的pip目录运行
首先婴儿级别安装多版本python,去官网下载zip python的包,然后复制到指定位置,之后重写安装一下pip
python3 -m pip install --upgrade --force-reinstall pip
image.png
然后让我们进入pip目录执行以下语句
pip3.8 install frida
pip3.8 install frida-tools
在python的script目录检测是否有frida.exe,运行frida --version
image.png

(2)夜神模拟器安装frida-server

为什么用夜神呢,因为他有很好的兼容性,以及他已经root了。and他有自带的adb特别方便文件操作,所以狠狠的爱了,他的adb在安装包的bin目录下
先cmd下用adb看看cpu版本:
adb shell getprop ro.product.cpu.abi
image.png
确认是x86后让我们去github下载server
https://github.com/frida/frida/releases
image.png
下载后解压一下就是一个二进制文件了,然后我们用adb把他放到安卓目录下
adb push xxxx /data/local/tmp
image.png
然后adb shell进入shell界面去赋一下权限以及更改文件名
mv ./frida-server-16.0.19-andro ./fs
chmod 777 fs
image.png
到这里准备工作算是完成了

(3)Burp+frida配合抓包

首先做一下基本准备

之后我们就可以先查看包名:
adb shell am monitor
运行之后会进入监听模式,然后打开模板app
image.png
获取内容了后,留意一下,记住它
然后再模拟器上启动frida-server服务器

1
2
3
adb shell
cd /data/local/tmp
./fs

image.png
随后准备在windows上运行hook

1
2
3
4
5
6
7
8
9
10
Java.perform(function() {
var array_list = Java.use("java.util.ArrayList");
var ApiClient = Java.use('com.android.org.conscrypt.TrustManagerImpl');

ApiClient.checkTrustedRecursive.implementation = function(a1, a2, a3, a4, a5, a6) {
// console.log('Bypassing SSL Pinning');
var k = array_list.$new();
return k;
}
}, 0);

frida -U -f com.fahai.investigation -l frida.js
image.png
那么现在完事具备,你已经可以抓包拉。
image.png

四、frida脱壳

1、模拟器运行frida-server

1
2
3
adb shell 
cd /data/local/tmp
./fs

然后打开需要脱壳的app,等待下一步操作

2、windows运行py脚本脱壳

安装好FRIDA-DEXDump
下载链接

1
https://github.com/hluwa/FRIDA-DEXDump

(注:建议下老版本哈,新版本可能会出点小问题)
然后到frida_dexdump目录下运行

1
python3 main.py

image.png
返回结果中能看到dex文件已经保存到本地的main.py的同一目录下的新文件夹的路径,本地打开即可image.png

3、查看代码

可以使用jadx直接打开dex文件查看代码
image.png

About this Post

This post is written by Boogipop, licensed under CC BY-NC 4.0.

#渗透测试